package com.mapull.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @author mapull
 */
public class FirstMap {

    public static void main(String[] args) {
//        saveMap();
//        findMap();
//        removeMap();
        forEachMap();
    }

    private static void saveMap(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Ada");
        map.put(2, "Bob");
        map.put(3, "Chery");

        System.out.println(map);
    }

    private static void findMap(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Ada");
        map.put(2, "Bob");
        map.put(3, "Chery");

        // 通过 key 获取 value
        System.out.println(map.get(3));
        // 获取所有的 key ，返回一个列表
        System.out.println(map.keySet());
        // 获取虽有的 value，返回一个列表
        System.out.println(map.values());
        // 获取所有的键值对，返回一个列表
        System.out.println(map.entrySet());
    }

    private static void removeMap(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Ada");
        map.put(2, "Bob");
        map.put(3, "Chery");

        // 通过 key 删除一个元素
        System.out.println(map.remove(1));
        System.out.println(map);
        // 通过 key 删除一个元素一个不存在的元素
        System.out.println(map.remove(5));
        System.out.println(map);

        // 通过 Key 与 value 删除一个元素
        System.out.println(map.remove(2, "Bob"));
        System.out.println(map);

        // 通过 Key 与 value 删除一个元素，key 与 value 不匹配
        System.out.println(map.remove(3, "Jack"));
        System.out.println(map);

    }

    private static void forEachMap(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Ada");
        map.put(2, "Bob");
        map.put(3, "Chery");

        // 最常用的迭代方式
        for(Map.Entry<Integer, String> entry: map.entrySet()){
            System.out.println("key "+ entry.getKey() + ", value " + entry.getValue());
        }
        System.out.println("-------- 分割线 --------");

        // 迭代器方式
        Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<Integer, String> entry = iterator.next();
            System.out.println("key "+ entry.getKey() + ", value " + entry.getValue());
        }
        System.out.println("-------- 分割线 --------");
        // lambda 方式
        map.forEach((k,v) -> System.out.println("key "+ k + ", value " + v));
    }

}
